﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Business.Entities;
using Negocio;
using Data.Database;

namespace UI.Consola
{
    public class Usuarios
    {
        Negocio.UsuarioLogic usuarionegocio;
        
        
        public Negocio.UsuarioLogic Usuarionegocio
        {
            
            get
            {
                return usuarionegocio;
            }
            set
            {
                usuarionegocio = value;
            }
        }
        public Usuarios()
        {
            usuarionegocio = new UsuarioLogic();
            
        }
        

        public void Menu()
        {
            int op;
            do
            {
                Console.WriteLine("Ingrese una opcion\n1– Listado General\n 2– Consulta\n3– Agregar\n4- Modificar\n5- Eliminar\n6- Salir");
                op = Convert.ToInt32(Console.ReadLine());
                switch (op)
                    {
                        case 1:
                           listadoGeneral();
                            break;
                        case 2:
                            this.consultar();
                            break;
                        case 3:
                            this.agregar();
                            break;
                        case 4:
                            this.modificar();
                            break;
                        case 5:
                            this.elminar();
                            break;
                
                       }


            } while (op != 6);
        
        }

        public void listadoGeneral()
        {
            Console.Clear();
            foreach (Usuario usr in  usuarionegocio.getAll())
            {
                mostrarDatos(usr);
            }
        
        }

        public void mostrarDatos(Usuario usr)
        {
            Console.WriteLine("Usuario: {0}", usr.ID);
            Console.WriteLine("\t\tNombre: {0}", usr.Nombre);
            Console.WriteLine("\t\tApellido: {0}", usr.Apellido);
            Console.WriteLine("\t\tNombre de Usuario: {0}", usr.Nombreusuario);
            Console.WriteLine("\t\tClave: {0}", usr.Clave);
            Console.WriteLine("\t\tEmail: {0}", usr.Email);
            Console.WriteLine("\t\tHabilitado: {0}", usr.Habilitado);
            Console.WriteLine();
        
        }

        public void consultar()

        {
            try
            {
                Console.Clear();
                Console.Write("Ingrese el ID del usuario a consultar: ");
                int ID = int.Parse(Console.ReadLine());
                this.mostrarDatos(usuarionegocio.getOne(ID));
            }
            catch (FormatException fe)
            {
                Console.WriteLine();
                Console.WriteLine("La ID ingresada debe ser un numero entero");

            }
            catch (Exception e)
            {
                Console.WriteLine();
                Console.WriteLine(e.Message);
            }
            finally
            {
                Console.WriteLine("Presiona una tecla para continuar");
                Console.ReadKey();
            }
            
        
        }

        public void modificar()
        {
            try
            {
                Console.Clear();
                Console.Write("Ingrese el ID del usuario a modificar: ");
                int ID = int.Parse(Console.ReadLine());
                Usuario usuario = usuarionegocio.getOne(ID);
                Console.Write("Ingrese Nombre: ");
                usuario.Nombre = Console.ReadLine();
                Console.Write("Ingrese Apellido: ");
                usuario.Apellido = Console.ReadLine();
                Console.Write("Ingrese Nombre de Usuario: ");
                usuario.Nombreusuario = Console.ReadLine();
                Console.Write("Ingrese clave: ");
                usuario.Clave = Console.ReadLine();
                Console.Write("Ingrese Email: ");
                usuario.Email = Console.ReadLine();
                Console.Write("Ingrese Habilitacion de Usuario: (1-Si/otro-No): ");
                usuario.Habilitado=(Console.ReadLine()=="1");
                usuario.State = BussinessEntity.States.Modified;
                usuarionegocio.save(usuario);
                

            }
            catch (FormatException fe)
            {
                Console.WriteLine();
                Console.WriteLine("La ID ingresada debe ser un numero entero");

            }
            catch (Exception e)
            {
                Console.WriteLine();
                Console.WriteLine(e.Message);
            }
            finally
            {
                Console.WriteLine("Presiona una tecla para continuar");
                Console.ReadKey();
            }

        
        
        }

        public void agregar()

        {
            Usuario usuario = new Usuario();
            Console.Clear();
            Console.Write("Ingrese Nombre: ");
            usuario.Nombre = Console.ReadLine();
            Console.Write("Ingrese Apellido: ");
            usuario.Apellido = Console.ReadLine();
            Console.Write("Ingrese Nombre de Usuario: ");
            usuario.Nombreusuario = Console.ReadLine();
            Console.Write("Ingrese clave: ");
            usuario.Clave = Console.ReadLine();
            Console.Write("Ingrese Email: ");
            usuario.Email = Console.ReadLine();
            Console.Write("Ingrese Habilitacion de Usuario: (1-Si/otro-No): ");
            usuario.Habilitado = (Console.ReadLine() == "1");
            usuario.State = BussinessEntity.States.New;
            usuarionegocio.save(usuario);
            Console.WriteLine();
            Console.WriteLine("ID: {0}", usuario.ID);

        }

        public void elminar()
        {
            try
            {
                Console.Clear();
                Console.Write("Ingrese el ID del usuario a eliminar: ");
                int ID = int.Parse(Console.ReadLine());
                usuarionegocio.delete(ID);
            }
            catch (FormatException fe)
            {
                Console.WriteLine();
                Console.WriteLine("La ID ingresada debe ser un numero entero");

            }
            catch (Exception e)
            {
                Console.WriteLine();
                Console.WriteLine(e.Message);
            }
            finally
            {
                Console.WriteLine("Presiona una tecla para continuar");
                Console.ReadKey();
            }

        }







    }
}
